home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 005 / epistat.arc / ANOVA.BAS (.txt) next >
Encoding:
GW-BASIC  |  1983-10-18  |  5.3 KB  |  105 lines

  1. 1  REM                   ANALYSIS OF VARIANCE
  2. 2  REM             Written by Tracy L. Gustafson, M.D.
  3. 3  REM            Round Rock, Texas. Version 2.1, 1983
  4. 4  DEF SEG=&H40
  5. 5  A=PEEK(&H17): IF NOT(A AND &H20) THEN POKE &H17,(A AND (NOT &H20)) OR &H20
  6. 8  DEF SEG: KEY OFF: CLEAR: OPTION BASE 1: DEFINT A-C,N,T,Z: DEFSTR D
  7. 9  SCREEN 0: WIDTH 80: COLOR 7,0,1: DIM NS(1)
  8. 10  CLS: PRINT TAB(25);"KEY";STRING$(22,205);"CLOSE"
  9. 12  PRINT TAB(25);"OPEN ANALYSIS OF VARIANCE OPEN"
  10. 15  PRINT TAB(25);"SCREEN";STRING$(22,205);"LOAD": PRINT: PRINT
  11. 20  PRINT TAB(10);"1.)  1-WAY ANOVA.  For comparing the MEANS of 3 or": PRINT TAB(15);"more independent samples. (unpaired test)": PRINT
  12. 30  PRINT TAB(10);"2.)  2-WAY ANOVA.  For evaluating the combined effects": PRINT TAB(15);"of 2 variables on a third. (ROW and COLUMN effects)": PRINT
  13. 35  PRINT TAB(10);"3.)  F DISTRIBUTION - Evaluate known F value": PRINT: PRINT
  14. 40  PRINT TAB(20);: INPUT "Enter your choice:   ",ASUB: IF ABS(ASUB-2)>1.1 THEN BEEP: GOTO 40 ELSE IF ASUB<3 THEN 50
  15. 42  CLS: PRINT TAB(17);"EVALUATING A KNOWN F VALUE - F DISTRIBUTION"
  16. 43  PRINT TAB(17);STRING$(43,205): PRINT: PRINT
  17. 44  PRINT TAB(26);: INPUT "Enter F value:   ",F: PRINT
  18. 45  PRINT TAB(15);: INPUT "Enter degrees of freedom in NUMERATOR:   ",V1: PRINT
  19. 46  PRINT TAB(13);: INPUT "Enter degrees of freedom in DENOMINATOR:   ",V2
  20. 47  GOSUB 400
  21. 48  COLOR 7,0: PRINT: PRINT TAB(17);: INPUT "Do you want to evaluate another F value?   ",A$
  22. 49  IF A$="y" OR A$="Y" THEN 42 ELSE 380
  23. 50  PRINT: PRINT: PRINT: AP=CSRLIN: PRINT TAB(8);: INPUT "What is the name of the DATAFILE you wish to analyze?   ",FILE$: ON ERROR GOTO 600
  24. 60  OPEN FILE$ FOR INPUT AS #1: INPUT #1, A,C
  25. 70  DIM D(A,C),CS(A,C),T(A),N$(A),X(A),X2(A),MD(A),SD(A)
  26. 80  FOR T=1 TO A: INPUT #1, T(T): NEXT
  27. 90  FOR T=1 TO A: FOR Z=1 TO C: INPUT #1, D(T,Z): NEXT: NEXT
  28. 100  FOR T=1 TO A: FOR Z=1 TO T(T): INPUT #1, CS(T,Z): NEXT: NEXT
  29. 110  FOR T=1 TO A: INPUT #1, N$(T),X(T),X2(T),MD(T),SD(T): NEXT: CLOSE #1
  30. 120  ON ASUB GOTO 130,200
  31. 130  CLS: PRINT TAB(23);"ONE-WAY ANALYSIS OF VARIANCE"
  32. 135  PRINT TAB(23);STRING$(28,205): PRINT: PRINT
  33. 140  PRINT TAB(25);FILE$;" has ";A;" samples. ": PRINT: PRINT TAB(10);
  34. 142  INPUT "How many samples do you want to include in the ANOVA?   ",AMX
  35. 144  PRINT "Enter these";AMX;"sample numbers:": ERASE NS: DIM NS(AMX)
  36. 145  PRINT: TB=11: FOR T=1 TO AMX: PRINT TAB(TB);: INPUT;"",NS(T): TB=TB+10: IF TB>70 THEN TB=11: PRINT
  37. 150  NEXT: PRINT: PRINT "NAMES:";:TB=9: FOR T=1 TO AMX: PRINT TAB(TB);N$(NS(T));: TB=TB+10: IF TB>70 THEN TB=9: PRINT
  38. 155  NEXT: PRINT: PRINT "MEANS:";: TB=7
  39. 156  FOR T=1 TO AMX: MN=X(NS(T))/T(NS(T)): IF ABS(MN)>9999 THEN P$="#######.#" ELSE IF ABS(MN)>9 THEN P$="#####.###" ELSE P$="##.######"
  40. 158  PRINT TAB(TB);: PRINT USING P$;MN;: TB=TB+10: IF TB>70 THEN TB=7: PRINT
  41. 160  NEXT: PRINT: XM=0: NT=0: XM2=0: ST=0: XT2=0
  42. 165  FOR T=1 TO AMX: XM=XM+X(NS(T)): XM2=XM2+X2(NS(T)): NT=NT+T(NS(T)): XT2=XT2+X(NS(T))*X(NS(T))/T(NS(T)): NEXT
  43. 170  ST=XT2-XM*XM/NT: SS=XM2-XM*XM/NT: ES=SS-ST
  44. 175  V1=AMX-1: V2=NT-AMX: F=ST/V1*V2/ES
  45. 180  PRINT: PRINT:PRINT TAB(8);"F = ";F;TAB(38);"DF1 = ";V1;TAB(52);"DF2 = ";V2
  46. 185  GOSUB 400
  47. 190  PRINT TAB(8);"The MEANS of these samples are ";:IF P>0.05 THEN PRINT "NOT ";
  48. 195  PRINT "significantly different.";TAB(75): COLOR 7,0
  49. 197  GOTO 350
  50. 200  CLS: PRINT TAB(23);"TWO-WAY ANALYSIS OF VARIANCE"
  51. 205  PRINT TAB(23);STRING$(28,205): PRINT
  52. 210  PRINT TAB(25);FILE$;" has ";A;" samples.": PRINT TAB(10);
  53. 212  INPUT "How many samples do you want to include in the ANOVA?   ",AMX
  54. 214  PRINT "Enter these";AMX;"sample numbers:": ERASE NS: DIM NS(AMX)
  55. 215  PRINT: TB=11: FOR T=1 TO AMX: PRINT TAB(TB);: INPUT;"",NS(T): TB=TB+10: IF TB>70 THEN TB=11: PRINT
  56. 216  NEXT: PRINT: PRINT "NAMES:";:TB=9: FOR T=1 TO AMX: PRINT TAB(TB);N$(NS(T));: TB=TB+10: IF TB>70 THEN TB=9: PRINT
  57. 217  NEXT: PRINT: PRINT "MEANS:";: TB=7
  58. 218  FOR T=1 TO AMX: MN=X(NS(T))/T(NS(T)): IF ABS(MN)>9999 THEN P$="#######.#" ELSE IF ABS(MN)>9 THEN P$="#####.###" ELSE P$="##.######"
  59. 219  PRINT TAB(TB);: PRINT USING P$;MN;: TB=TB+10: IF TB>70 THEN TB=7: PRINT
  60. 220  NEXT: PRINT: FOR T=2 TO AMX: IF T(NS(T))<>T(NS(1)) THEN PRINT "These samples do not all have the same number of elements---": PRINT TAB(37);"a 2-WAY ANOVA cannot be performed.": GOTO 350 ELSE NEXT
  61. 230  XR2=0: XM=0: XM2=0: XC2=0: N=T(NS(1)): NT=AMX*N
  62. 240  FOR Z=1 TO N: XR=0: FOR T=1 TO AMX: XR=XR+VAL(D(NS(T),Z)): NEXT
  63. 250  XR2=XR2+XR*XR/AMX: NEXT
  64. 260  FOR T=1 TO AMX: XM=XM+X(NS(T)): XM2=XM2+X2(NS(T)): XC2=XC2+X(NS(T))*X(NS(T))/N: NEXT
  65. 270  SS=XM2-XM*XM/NT: SR=XR2-XM*XM/NT: SC=XC2-XM*XM/NT: RES=SS-SR-SC
  66. 280  V1=N-1: V2=(N-1)*(AMX-1): F=SR/V1*V2/RES: PRINT
  67. 290  PRINT TAB(8);"F (ROWS) = ";F;TAB(44);"DF1 = ";V1;TAB(59);"DF2 = ";V2
  68. 295  GOSUB 400
  69. 300  PRINT TAB(14);"There is ";: IF P>0.05 THEN PRINT "NOT ";
  70. 305  PRINT "a significant difference between ROWS.";TAB(75): COLOR 7,0
  71. 310  V1=A-1: F=SC/V1*V2/RES: PRINT: PRINT
  72. 315  PRINT TAB(8);"F (COLUMNS) = ";F;TAB(44);"DF1 = ";V1;TAB(59);"DF2 = ";V2
  73. 320  GOSUB 400
  74. 330  PRINT TAB(12);"There is ";: IF P>0.05 THEN PRINT "NOT ";
  75. 340  PRINT "a significant difference between COLUMNS.";TAB(75): COLOR 7,0
  76. 350  PRINT: PRINT
  77. 360  PRINT "  Do you want to perform another ANALYSIS OF VARIANCE test": PRINT TAB(50);: INPUT "using this datafile?   ",A$
  78. 370  IF A$="y" OR A$="Y" THEN 120
  79. 380  END
  80. 400  X=1/(V1/V2*F+1): Y=1-X: PF=1: PT=1: VA=V1: VB=V2
  81. 410  IF V1 MOD 2<>0 THEN IF V2 MOD 2=0 THEN 450 ELSE 470
  82. 420  IF V2 MOD 2=0 THEN IF V2>=V1 THEN 450
  83. 430  FOR Z=1 TO (V1/2-1): PF=PF*(0.5/Z*Y*VB): PT=PT+PF: VB=VB+2: NEXT
  84. 440  P=X^(V2*0.5)*PT: GOTO 570
  85. 450  FOR Z=1 TO (V2/2-1): PF=PF*(0.5/Z*X*VA): PT=PT+PF: VA=VA+2: NEXT
  86. 460  P=1-Y^(V1*0.5)*PT: GOTO 570
  87. 470  XT=ATN(SQR(F*V1/V2)): X=SIN(XT): Y=COS(XT): PT=Y: PF=Y
  88. 480  IF V2=1 THEN 510
  89. 490  FOR Z=2 TO (V2-3) STEP 2: PF=PF*Y*Y*Z/(Z+1): PT=PT+PF: NEXT
  90. 500  PT=PT*X: XT=XT+PT
  91. 510  PT=1: PF=1: IF V1=1 THEN 560
  92. 520  FOR Z=2 TO (V2-1) STEP 2: PF=PF*Z/(Z-1): NEXT
  93. 530  PF=PF*Y^V2*X: PZ=1: PT=1: VB=V2+1
  94. 540  FOR Z=3 TO (V1-2) STEP 2: PZ=PZ*VB*X*X/Z: PT=PT+PZ: VB=VB+2: NEXT
  95. 550  XT=XT-PT*PF
  96. 560  P=1-XT*2/3.14159
  97. 570  PLAY "MB MS O2 T140 L32G L8A L32F L8G. L20 CDC L2 F"
  98. 575  PRINT: PRINT TAB(25);:COLOR 0,7:PRINT "  P = ";:IF P<1E-06 THEN PRINT "< 10 (-6)"; ELSE PRINT P;
  99. 580  PRINT TAB(46): PRINT: COLOR 0,7: RETURN
  100. 590  END
  101. 600  BEEP: PRINT: IF ERL=60 AND ERR=53 THEN PRINT: PRINT TAB(13); "I cannot find a file by that name on drive "; ELSE 630
  102. 610  IF MID$(FILE$,2,1)=":" THEN DR$=LEFT$(FILE$,2) ELSE DR$="A:"
  103. 620  PRINT DR$: PRINT "Your files are:": FILES DR$+"*.*": RESUME 50
  104. 630  ON ERROR GOTO 0
  105.